home *** CD-ROM | disk | FTP | other *** search
/ Aminet 1 (Walnut Creek) / Aminet - June 1993 [Walnut Creek].iso / aminet / dev / lang / pcq12src.lzh / Runtime / Extras / TimerUtils.p < prev   
Text File  |  1991-04-05  |  2KB  |  85 lines

  1. External;
  2.  
  3. {
  4.     TimerUtils.p
  5.  
  6.     This file declares CreateTimer, WaitTimer, and DeleteTimer.
  7. }
  8.  
  9. {$I "Include:Exec/Ports.i"}
  10. {$I "Include:Devices/Timer.i"}
  11. {$I "Include:Utils/IOUtils.i"}
  12. {$I "Include:Exec/IO.i"}
  13. {$I "Include:Exec/Devices.i"}
  14.  
  15. Function CreateTimer : TimeRequestPtr;
  16. var
  17.     Error : Short;
  18.     TimerPort : MsgPortPtr;
  19.     TimeReq : IOStdReqPtr;
  20. begin
  21.     TimerPort := CreatePort(Nil, 0);
  22.     if TimerPort = Nil then
  23.     CreateTimer := Nil;
  24.     TimeReq := CreateStdIO(TimerPort);
  25.     if TimeReq = Nil then begin
  26.     DeletePort(TimerPort);
  27.     CreateTimer := Nil;
  28.     end;
  29.     Error := OpenDevice(TIMERNAME, UNIT_VBLANK, IORequestPtr(TimeReq), 0);
  30.     if Error <> 0 then begin
  31.     DeleteStdIO(TimeReq);
  32.     DeletePort(TimerPort);
  33.     CreateTimer := Nil;
  34.     end;
  35.     TimerBase := TimeReq^.io_Device;
  36.     CreateTimer := TimeRequestPtr(TimeReq);
  37. end;
  38.  
  39. Function SetTimer(WhichTimer : TimeRequestPtr;
  40.             Seconds, Microseconds : Integer) : MsgPortPtr;
  41. var
  42.     TempPort : MsgPortPtr;
  43. begin
  44.     with WhichTimer^ do begin
  45.     TempPort := tr_Node.io_Message.mn_ReplyPort;
  46.     tr_Node.io_Command := TR_ADDREQUEST;    { add a new timer request }
  47.     tr_Time.tv_Secs := Seconds;        { seconds }
  48.     tr_Time.tv_Micro := Microseconds;        { microseconds }
  49.         SendIO(IORequestPtr(WhichTimer));
  50.     SetTimer := TempPort;
  51.     end;
  52. end;
  53.  
  54. Procedure WaitTimer(WhichTimer : TimeRequestPtr;
  55.             Seconds, Microseconds : Integer);
  56. var
  57.     Error : Short;
  58. begin
  59.     with WhichTimer^ do begin
  60.     tr_Node.io_Command := TR_ADDREQUEST;    { add a new timer request }
  61.     tr_Time.tv_Secs := Seconds;        { seconds }
  62.     tr_Time.tv_Micro := Microseconds;        { microseconds }
  63.     Error := DoIO(IORequestPtr(WhichTimer));
  64.     end;
  65. end;
  66.  
  67. Procedure GetSysTime(WhichTimer : TimeRequestPtr; VAR TV : TimeVal);
  68. var
  69.     Error : Short;
  70. begin
  71.     WhichTimer^.tr_Node.io_Command := TR_GETSYSTIME;
  72.     Error := DoIO(IORequestPtr(WhichTimer));
  73.     TV := WhichTimer^.tr_Time;
  74. end;
  75.     
  76. Procedure DeleteTimer(WhichTimer : TimeRequestPtr);
  77. var
  78.     WhichPort : MsgPortPtr;
  79. begin
  80.     CloseDevice(IORequestPtr(WhichTimer));
  81.     WhichPort := WhichTimer^.tr_Node.io_Message.mn_ReplyPort;
  82.     DeleteStdIO(IOStdReqPtr(WhichTimer));
  83.     DeletePort(WhichPort);
  84. end;
  85.